/**
 * 只能是字母和数字的验证
 */
jQuery.validator.addMethod("charnum", function(value, element) {
	return this.optional(element)
			|| (/^([a-zA-Z0-9]+)$/.test(value));
}, "Please enter a valid format(A-Z, a-z, 0-9 only).");
/**
 * 只能是小写字母和数字的验证
 */
jQuery.validator.addMethod("lowercharnum", function(value, element) {
	return this.optional(element)
			|| (/^([a-z0-9]*)$/.test(value));
}, "只能输入数字和小写英文字母");

/**
 * 只能是小写字母的验证
 */
jQuery.validator.addMethod("lowerchar", function(value, element) {
	return this.optional(element)
			|| (/^([a-z0-9]*)$/.test(value));
}, "只能输入小写英文字母");
/**
 * 金额验证
 */
jQuery.validator.addMethod("money", function(value, element) {
			return this.optional(element) || (/^-?\d+\.{0,}\d{0,}$/.test(value));
		}, "Please enter a valid money format.");
/**
 * 日期格式验证yyyy-mm-dd
 */
jQuery.validator.addMethod("dateformat", function(value, element){
		return this.optional(element) || (checkDate(value)); 
	}, "Please enter a valid date format.[yyyy-MM-dd]" );

/**
 * 文件扩展名的验证
 */
jQuery.validator.addMethod("fileExtName", function(value, element, param){
	if (this.optional(element)) {
		// 元素值为空则不验证
		return true;
	}
	
	var idx = value.lastIndexOf(".");
	var extName = value.substring(idx + 1);	// 用户上传文件的扩展名
	
	var validExtNames = param.split(",");	// 验证规则指定的有效的扩展名数组
	for (idx in validExtNames) {
		if (extName.toLowerCase() == validExtNames[idx].toLowerCase()) {
			return true;
		}
	}
	return false; 
}, $.validator.format("上传文件类型错误，有效的文件类型为{0}"));

/**
 * 文件大小验证
 */
jQuery.validator.addMethod("validateFileEmpty", function(value, element) {
	if (this.optional(element)) {
		// 元素值为空则不验证
		return true;
	}
	//判断上传文件大小
    return element.files[0].size>0;
},"文件内容为空");

/**
 * 文件大小验证
 */
jQuery.validator.addMethod("validateFileSize", function(value, element, param) {
	if (this.optional(element)) {
		// 元素值为空则不验证
		return true;
	}
	//判断上传文件大小
    return element.files[0].size<param;
},"文件超过指定大小");

/**
 * 登录账号的验证
 * 规则：6-20个字符（可使用小写字母、数字、下划线，需以字母开头）
 */
jQuery.validator.addMethod("login", function(value, element) {
	var pattern = /^[a-z][a-z_0-9]{5,19}$/;
	return this.optional(element) || pattern.test(value);
}, "登录账号只应包含小写英文字母、数字、下划线，并以字母开头");

/**
 * 登录密码的验证
 * 规则：8-16个字符
 *     组合使用大小写字母、数字及特殊字符（特殊字符包括 !、$、#、%、@、_、-）
 *     不能包含登录账号
 */
jQuery.validator.addMethod("passwd", function(value, element, param) {
	if (this.optional(element)) {
		// 元素值为空则不验证
		return true;
	}
	
	// 合法字符及长度验证
	//var validCharPattern = /^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[\!\@\#\$\%\_\-])[0-9a-zA-Z\!\@\#\$\%\_\-]{8,16}$/; //IE7不正常
	var validCharPattern = /^(?!\D+$)(?![^a-z]+$)(?![^A-Z]+$)(?![^\!\@\#\$\%\_\-]+$)[0-9a-zA-Z\!\@\#\$\%\_\-]{8,16}$/;
	if (!validCharPattern.test(value)) {
		return false;
	}
	
	// 不能包含用户的帐户名 
	if ($.trim(param) != "" && value.indexOf(param) != -1) {
		return false;
	}
	
	return true;
}, "您输入的密码不满足密码策略的要求:<ul><li>8-16个字符</li><li>必须同时包含大写字母、小写字母及特殊字符（特殊字符包括 !、$、#、%、@、_、-）</li><li>不能包含登录账号</li></ul>");

/**
 * 字节长度的验证，一个汉字占3个字节
 */
jQuery.validator.addMethod("byteRangeLength", function(value, element, param) {
    var length = value.length;
    for(var i = 0; i < value.length; i++){
    	if(value.charCodeAt(i) > 127){
        	length+=2;	// Oracle的AL32UTF8编码，一个汉字占3个字节
        }
    }
	return this.optional(element) || ( length >= param[0] && length <= param[1] );   
}, $.validator.format("您的输入不符合{0}-{1}个字符的长度限制"));

/**
 * 营业执照号的验证
 */
jQuery.validator.addMethod("businessLicenceNum", function(value, element, param) {
	var pattern = /^\d{15}$/;
	return this.optional(element) || pattern.test(value);   
}, $.validator.format("请输入正确格式的营业执照号：15位数字"));

/**
 * 工商注册号的验证
 */
jQuery.validator.addMethod("commerceRegistrationNum", function(value, element, param) {
	var pattern = /^[a-zA-Z0-9\_\-]{1,15}$/;
	return this.optional(element) || pattern.test(value);   
}, $.validator.format("请输入正确格式的工商注册号：1-15个字符，可以包含数字、字母、下划线、横线"));

/**
 * 组织机构代码的验证
 */
jQuery.validator.addMethod("organizationCodeNum", function(value, element, param) {
	var pattern = /^[a-zA-Z0-9\_\-]{1,15}$/;
	return this.optional(element) || pattern.test(value);   
}, $.validator.format("请输入正确格式的组织机构代码：1-15个字符，可以包含数字、字母、下划线、横线"));

/**
 * 税务登记证号的验证
 */
jQuery.validator.addMethod("taxRegistrationNum", function(value, element, param) {
	var pattern = /^[a-zA-Z0-9\_\-]{15,15}$/;
	var pattern2 = /^[a-zA-Z0-9\_\-]{18,18}$/;
	return this.optional(element) || pattern.test(value) || pattern2.test(value);   
}, $.validator.format("请输入正确格式的税务登记证号：15或18个字符，可以包含数字、字母、下划线、横线"));

/**
 * 建行E商贸通会员证件号码的验证
 */
jQuery.validator.addMethod("CCBMbrCertNo", function(value, element) {
	return this.optional(element)
			|| (/^([a-zA-Z0-9-]+)$/.test(value));
}, "建行开户证件号码只应包含数字、字母和横线");

/**
 * 电话号码的验证
 */
jQuery.validator.addMethod("phoneNumber", function(value, element, param) {
	var pattern = /(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{7,8}$)/;
	return this.optional(element) || pattern.test(value);   
}, $.validator.format("请输入正确格式的电话号码：80808080、(010)80808080、010-80808080"));

/**
 * 手机号码的验证
 */
jQuery.validator.addMethod("mobileNumber", function(value, element, param) {
	var pattern = /^[0-9]{11}$/;
	return this.optional(element) || pattern.test(value);   
}, $.validator.format("请输入正确格式的手机号码：13212345678"));

/**
 * 同时验证手机和座机 
 */
jQuery.validator.addMethod("phoneNumber2", function(value, element, param) {
	if(this.optional(element)){
		return true;
	}
	
	var pattern0 = /,/;
	if(pattern0.test(value)){//存在逗号
		return false;
	}
	//var pattern1 = /^0{0,1}(13[4-9]|147|15[0-2]|15[7-9]18[278])[0-9]{8}$/;
	//var pattern2 = /^0{0,1}(13[0-2]|15[56]|18[56])[0-9]{8}$/;
	//var pattern3 = /^0{0,1}(133|153|180|189)[0-9]{8}$/;
	var pattern1 = /^[0-9]{11}$/;
	var pattern4 = /(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{7,8}$)/;
	
	return this.optional(element) || pattern1.test(value) || pattern4.test(value);   
}, $.validator.format("请输入正确格式的电话号码:<br>13212345678<br>80808080<br>(010)80808080<br>010-80808080"));

/**
 * 支付金额的验证
 */
jQuery.validator.addMethod("paymentNum", function(value, element, param) {
	var pattern = /^([1-9][\d]{0,11}|0)(\.[\d]{1,2})?$/;
	return this.optional(element) || pattern.test(value);   
}, $.validator.format("请输入正确格式的金额：小于13位的数字"));
/**
 * 验证前后空格
 */
jQuery.validator.addMethod("namespace", function(value, element, param) {
	var pattern = /^(\s|\u00A0)+|(\s|\u00A0)+$/g;
	return this.optional(element) || !pattern.test(value);   
}, $.validator.format("请去掉前后空格"));

function checkDate(theDate){
	var reg = /^\d{4}-((0{0,1}[1-9]{1})|(1[0-2]{1}))-((0{0,1}[1-9]{1})|([1-2]{1}[0-9]{1})|(3[0-1]{1}))$/;
	if(theDate.length != 10){
		return false;
	}
	var result=true;
	if(!reg.test(theDate))
		result = false;
	else{
		var arr_hd=theDate.split("-");
		var dateTmp;
		dateTmp= new Date(arr_hd[0],parseFloat(arr_hd[1])-1,parseFloat(arr_hd[2]));
		if(dateTmp.getFullYear()!=parseFloat(arr_hd[0])
				|| dateTmp.getMonth()!=parseFloat(arr_hd[1]) -1
				|| dateTmp.getDate()!=parseFloat(arr_hd[2])){
			result = false
		}
	}
	return result;
}
/**
 * 最小倍数
 * @author sunjian
 * @version 2013.03.22
 */
jQuery.validator.addMethod("numbertimes", function(value, element, param) {
	return (((value-param[0])%param[1]) == 0 );
}, jQuery.validator.format("请输入 {0} 的倍数"));
/**
 * jQuery 验证默认的错误提示
 */
jQuery.extend(jQuery.validator.messages, {
			required : "必填项",
			remote : "请修正该字段",
			email : "请输入正确电子的邮件",
			url : "请输入正确的网址",
			date : "请输入正确的日期",
			dateISO : "请输入合法的日期 (ISO).",
			number : "请输入合法的数字",
			digits : "请输入整数",
			creditcard : "请输入合法的信用卡号",
			equalTo : "请再次输入相同的值",
			accept : "请输入拥有合法后缀名的字符串",
			maxlength : jQuery.validator.format("请输入一个长度最多是 {0} 的字符串"),
			minlength : jQuery.validator.format("请输入一个长度最少是 {0} 的字符串"),
			rangelength : jQuery.validator.format("请输入一个长度介于 {0} 和 {1} 之间的字符串"),
			range : jQuery.validator.format("请输入一个介于 {0} 和 {1} 之间的值"),
			max : jQuery.validator.format("请输入一个最大为 {0} 的值"),
			min : jQuery.validator.format("请输入一个最小为 {0} 的值")
		});
		
		